// 模拟本地存储操作的工具类
// 在Previewer环境中替代真实的本地存储功能

export class StorageMock {
  private static storage: Map<string, string> = new Map<string, string>();
  
  /**
   * 保存数据到存储
   * @param key 键
   * @param value 值
   * @returns 是否保存成功
   */
  public static save(key: string, value: string): boolean {
    try {
      this.storage.set(key, value);
      return true;
    } catch (error) {
      console.error('Failed to save data to storage:', error);
      return false;
    }
  }
  
  /**
   * 从存储中获取数据
   * @param key 键
   * @returns 存储的数据，如果不存在返回null
   */
  public static get(key: string): string | null {
    return this.storage.get(key) || null;
  }
  
  /**
   * 从存储中删除数据
   * @param key 键
   * @returns 是否删除成功
   */
  public static delete(key: string): boolean {
    return this.storage.delete(key);
  }
  
  /**
   * 清空所有存储的数据
   * @returns 是否清空成功
   */
  public static clear(): boolean {
    try {
      this.storage.clear();
      return true;
    } catch (error) {
      console.error('Failed to clear storage:', error);
      return false;
    }
  }
  
  /**
   * 保存JSON对象到存储
   * @param key 键
   * @param object JSON对象
   * @returns 是否保存成功
   */
  public static saveObject(key: string, object: any): boolean {
    try {
      const jsonString = JSON.stringify(object);
      return this.save(key, jsonString);
    } catch (error) {
      console.error('Failed to save object to storage:', error);
      return false;
    }
  }
  
  /**
   * 从存储中获取JSON对象
   * @param key 键
   * @returns JSON对象，如果不存在或解析失败返回null
   */
  public static getObject<T>(key: string): T | null {
    try {
      const jsonString = this.get(key);
      if (jsonString) {
        return JSON.parse(jsonString) as T;
      }
      return null;
    } catch (error) {
      console.error('Failed to get object from storage:', error);
      return null;
    }
  }
  
  /**
   * 获取存储中所有键的列表
   * @returns 键的数组
   */
  public static getAllKeys(): string[] {
    return Array.from(this.storage.keys());
  }
  
  /**
   * 检查键是否存在
   * @param key 键
   * @returns 是否存在
   */
  public static has(key: string): boolean {
    return this.storage.has(key);
  }
  
  /**
   * 获取存储中的项目数量
   * @returns 项目数量
   */
  public static size(): number {
    return this.storage.size;
  }
}